ssunguotu

  • 主页
  • 随笔
所有文章 关于我

ssunguotu

  • 主页
  • 随笔

[Roban]lisp学习笔记

2020-08-13

lisp学习笔记

lisp学习笔记

lisp的程序结构

LISP表达式称为符号表达式或S-表达式。s表达式是由三个有效对象,原子,列表和字符串。

任意的s-表达式是一个有效的程序。

Lisp程序在解释器或编译的代码运行。

lisp基本语法

基本数据

程序由三个基本的数据构成:atom,list,string

atom:

为一个数字连续字符或连续的字符串,包括数字和特殊字符。

hello-from-tutorials-yiibai
name
123008907
hello
Block#221

list:

广义表

( i am a list)
(a ( a b c) d e fgh)
(father tom ( susan bill joe))
(sun mon tue wed thur fri sat)

string:

一组括在双引号内的字符

“ I am a string”
“a ba c d efg #$%^&!”
“Please enter the following details :”
“Hello from ‘Tutorials Yiibai’! “

添加注释: 使用;

quote函数

lisp 的 symbol-expression 可以是原子 或 列表。

列表由 原子 和 列表组成。

如果不用 quote (‘), 那么列表的第一元素是函数, 对后续元素求值,并作为参数。

如果使用 quote(‘), 那么对于列表而言,就是返回列表,不求值,而且它的所有元素都不求值. 例如 ‘(+ 2 3) 就返回 (+ 2 3), ‘(+ (- 10 5) 2) 返回 (+ (- 10 5) 2)

对于原子 ‘a, 也是返回 a, 不对a求值。

set函数和setq函数

在Lisp中,如果我们希望对一个变量赋值,可以使用set函数,用法如下:

1
(set ‘my-value "my string")

上面的代码是对变量my-value进行赋值,值是”my String”。注意其中的‘my-value前面是有一个单引号的。

我们知道,在Lisp中,‘my-value其实是(quote my-value)的简写,所以上面的set函数代码也可以写成这样:

1
(set (quote my-value) "my string")

不过,因为set函数使用的次数很多,每次都要使用quote或者在变量名前加一个单引号比较麻烦,于是发展了setq函数,setq中的q字母就是代表quote的意思,使用setq函数就可以这样写了:

1
(setq my-value "my string")

如果只是这样使用,可以认为set和setq是没有差别的,只是格式简化了。

但是,事实上setq比set函数要高级一些,setq函数还可以同时对多个变量进行赋值,像下面这样:

1
(setq my-value1 "my string 1" my-value2 "my string 2")

上面的代码同时对变量my-value1和my-value2进行赋值。而set函数就不能这样使用了。

需要注意的点

  • 在LISP语言的基本数学运算是 +, -, *, 和 /

  • Lisp实际上是一个函数调用f(x)为 (f x),例如 cos(45)被写入为 cos 45

  • LISP表达式是不区分大小写的,cos 45 或COS 45是相同的。

  • LISP尝试计算一切,包括函数的参数。只有三种类型的元素是常数,总是返回自己的值:

    数字

    字母t,即表示逻辑真

    该值为nil,这表示逻辑false,还有一个空的列表。

赏

谢谢你请我吃糖果

扫一扫,分享到微信

微信分享二维码
[RoboCup]关键帧抓取数据笔记记录
[Roban]第三周:论文阅读
  1. 1. lisp学习笔记
    1. 1.1. lisp的程序结构
    2. 1.2. lisp基本语法
© 2021 ssunguotu
Hexo Theme Yilia by Litten
  • 所有文章
  • 关于我

tag:

  • hexo生成错误
  • 数据结构
  • <数据结构>
  • 爬虫
  • tst
  • 算法题
  • A*搜索

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

没啥东西。